"""
@File    :   list_to_tree.py
@Time    :   2024/04/01 08:04:08
@Author  :   Qrj
@Email   :   923207736@qq.com
@description   :   列表转前端Tree的工具类
"""


class ListConvertToTreeUtil:
    """列表转前端Tree工具类"""

    @staticmethod
    def convert(
        original_list: list[dict],
        id_key_name: str = "id",
        pid_key_name: str = "parent_id",
        children_key_name: str = "children",
    ) -> list[dict]:
        """列表转前端Tree转换方法

        Args:
            original_list (list[dict]): 原来的列表
            id_key_name (str): id键名
            pid_key_name (str): 父id键名
            children_key_name (str): children键名

        Returns:
            list[dict]: Tree列表
        """
        # 新建Tree列表结果
        tree_list = []
        # 遍历, 以id为key生成map
        id_dict_map = {i.get(id_key_name): i for i in original_list}
        # 遍历, 构建Tree列表
        for node in original_list:
            # 获取父节点
            parent_node = id_dict_map.get(node.get(pid_key_name))
            # 有父节点则添加到父节点子集
            if parent_node:
                if children_key_name in parent_node:
                    parent_node[children_key_name].append(node)
                else:
                    parent_node[children_key_name] = [node]
            else:
                tree_list.append(node)
        return tree_list
